# CMFA (Complex of modules file analyzer)

cmfa (Complex of modules file analyzer / Комплекс модулей анализатора файлов)
 — это консольный инструмент написанный на языке программирования C для анализа файлов.
 Он использует различные библиотеки для определения типа файла, кодировки, метаданных, архивных структур, медиа-характеристик и других свойств.

## Возможности

- Определение MIME-типа и описания файла (`libmagic`).
- Проверка кодировки текста (`uchardet`, `iconv`).
- Анализ архивов (`libarchive`).
- Извлечение метаданных медиафайлов (`libavformat`).
- Чтение EXIF-данных из JPEG (`libexif`).
- Проверка сигнатур файлов (PNG, JPEG, ELF и др.).
- Анализ текстовых файлов (JSON, CSV, ANSI-коды).
- Модульная архитектура для легкого расширения.

## Сборка и установка
Для установки зависимостей и сборки проекта следуйте инструкциям в INSTALL.md.

## Использование и анадиз файла:
```bash
./cmfa example.jpeg
```

### Приём в аргумент строки:
```bash
./cmfa "Hello, World!"
```

### Пример вывода (для JPEG-файла)

```plaintext
Module: 00
 *** Complex of modules file analyzer ***

Module: 01
 Main: File is regular file

Module: 04
 Library libmagic: MIME: image/jpeg, Description: JPEG image data

Module: 09
 Library custom_signature: Signature match: JPEG, MIME: image/jpeg

Module: 11
 Library libexif: Resolution: 1920x1080, Taken: 2023:05:12 14:30:45, Camera: Canon EOS, GPS: None
```

## Поддерживаемые модули

- **Module 00**: Вывод баннера программы.
- **Module 01**: Проверка типа файла (обычный файл или нет).
- **Module 02**: Анализ текстовых файлов (ANSI-коды, JSON, CSV).
- **Module 03**: Метаданные файла (размер, права, тип).
- **Module 04**: MIME-тип и описание (`libmagic`).
- **Module 05**: Проверка совместимости с UTF-8 (`iconv`).
- **Module 06**: Определение кодировки текста (`uchardet`).
- **Module 07**: Анализ архивов (`libarchive`).
- **Module 08**: Анализ медиафайлов (формат, длительность, потоки).
- **Module 09**: Проверка сигнатур (PNG, JPEG, ELF, PDF и др.).
- **Module 10**: Текстовый или бинарный анализ файла.
- **Module 11**: Извлечение EXIF-данных из JPEG (`libexif`).
- **Module 30**: Вывод входной строки.

**Примечание**: Модули 12–29 и 31–35 зарезервированы для будущих расширений.

## Контрибьютинг
Хотите добавить новый модуль или улучшить cmfa?
Пожалуйста, следуйте структуре существующих модулей (`module_*.c`) и обновляйте `Makefile` при добавлении новых зависимостей.

## Статус проекта
cmfa активно разрабатывается. Планируется добавление новых модулей и оптимизация производительности.

## Автор:
- **Grannik**

## Контакты:
- **Сайт**: [Granni](https://grannik.neocities.org/)

## Репозитории:
- **Codeberg**:     [cmfa](https://codeberg.org/Grannik/CMFA)
- **GitHub**:       [cmfa](https://github.com/Grannik/CMFA)
- **GitLab**:       [cmfa](https://gitlab.com/grannik/cmfa)
- **SourceForge**:  [cmfa](https://sourceforge.net/projects/cmfa/)
- **NotABug**:      [cmfa]()
- **Gitea (Demo)**: [cmfa]()
- **Gogs (Demo)**:  [cmfa]()

## Лицензия
Этот проект распространяется под лицензией **MIT**.
См. файл [`LICENSE`](LICENSE) для подробностей.
**Примечание**: Если вы используете cmfa в своем проекте, буду благодарен, если укажите авторство.
